package com.gdust.lease.common.login;

/**
 * ClassName: LoginUserHolder
 * Package: com.gdust.lease.common.login
 * Description:该类使用 `ThreadLocal` 存储当前请求的登录用户信息，
 * 使得同一线程中的方法能够随时访问用户信息，而无需显式传递参数。
 *
 * 思路：为避免重复解析，通常会在拦截器将Token解析完毕后，将结果保存至ThreadLocal中，
 * 这样一来，便可以在整个请求的处理流程中进行访问了。
 *
 * @Author syun
 * @Create 2025/2/7 20:56
 * @Version 1.0
 */
public class LoginUserHolder {
    // 使用 ThreadLocal 存储当前登录用户的信息，确保线程安全
    public static ThreadLocal<LoginUser> threadLocal = new ThreadLocal<>();

    /**
     * 设置当前线程的登录用户信息
     *
     * @param loginUser 登录用户对象
     */
    public static void setLoginUser(LoginUser loginUser) {
        threadLocal.set(loginUser);
    }

    /**
     * 获取当前线程的登录用户信息
     *
     * @return LoginUser 登录用户对象，若未设置则返回 null
     */
    public static LoginUser getLoginUser() {
        return threadLocal.get();
    }

    /**
     * 清除当前线程的登录用户信息，防止内存泄漏
     */
    public static void clear() {
        threadLocal.remove();
    }
}
